package cn.bitkit.tools.common;

import cn.bitkit.base.util.StringUtil;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author changbo
 */
public class MapUtil {
	
	public static Map<String, String> paramToMap(String str){
		Map<String, String> map = new LinkedHashMap<String, String>();
		if(StringUtil.isEmpty(str)){
			return map;
		}
		String[] strArray = str.split("&");
		for(String s : strArray){
			if(StringUtil.isEmpty(s)){
				continue;
			}
			String[] kv = s.split("=");
			if(kv.length >= 2){
				map.put(kv[0].trim(), kv[1].trim());
			}
		}
		return map;
	}

	public static String mapToParam(Map<String, String> map){
		return map.entrySet().stream()
				.map( e -> e.getKey() + "=" + e.getValue())
				.collect(Collectors.joining("&"));
	}
	
	public static <K,V> Map<V,K> reverse(Map<K,V> map){
		return map.keySet().stream().collect(Collectors.toMap(map::get, x->x));
	}
	
	public static String getString(Map<?, ?> map, Object key){
		if(map.get(key) == null) {
			return null;
		}
		return map.get(key).toString();
	}
	
	public static boolean getBoolean(Map<?, ?> map, Object key){
		return StringUtil.toBoolean(StringUtil.getValue(map.get(key)));
	}
	
	public static int getInt(Map<?, ?> map, Object key){
		return StringUtil.toInt(StringUtil.getValue(map.get(key)));
	}
	
	public static long getLong(Map<?, ?> map, Object key){
		return StringUtil.toLong(StringUtil.getValue(map.get(key)));
	}
	
}
